package by.bsu.touragency.tag;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.log4j.Logger;

import by.bsu.touragency.command.guest.ConfigurationManager;
import by.bsu.touragency.db.beans.Tour;
import by.bsu.touragency.db.beans.Person;
import by.bsu.touragency.db.dao.PersonDAO;
import by.bsu.touragency.db.dao.TourDAO;


public class ViewTourTag extends BodyTagSupport {

	private static final long serialVersionUID = 1L;
	private static Logger logger=Logger.getLogger("log");
	
	private TourDAO t;
	private ArrayList<Tour> tours;
	private int num;
	private boolean flag;

	public void setNum(String num) {
		this.num = new Integer(num);
	}

	public int getTourPrice() {
		return tours.get(num).getPrice();
	}
	
	public String getTourPlace() {
		String str;
		str = tours.get(num).getHotel().getName()+", ";
		str += tours.get(num).getHotel().getCity().getCityName()+", ";
		str += tours.get(num).getHotel().getCity().getCountry().getCountryName();
		return str;
	}
	public String getTourPeople() {
		String str;
		str = tours.get(num).getHotel().getPeople().getChildren()+ " children & ";
		str += tours.get(num).getHotel().getPeople().getAdults()+" adults";
		return str;
	}
	public String getTourEat() {
		String str;
		str = tours.get(num).getHotel().getEat().getType()+ ": ";
		if(tours.get(num).getHotel().getEat().getAbout()!=null)
		str += tours.get(num).getHotel().getEat().getAbout()+" ";
		return str;
	}
	public String getTourHotel() {
		String str;
		str = tours.get(num).getHotel().getName()+ " ";
		str += tours.get(num).getHotel().getStar().getName();
		if (tours.get(num).getHotel().getStar().getAbout()!=null&&t.readNB().get(num).getHotel().getStar().getAbout()!="")
		str += " ("+tours.get(num).getHotel().getStar().getAbout()+") .";
		if (tours.get(num).getHotel().getAbout()!=null&&t.readNB().get(num).getHotel().getAbout()!="")
			if(tours.get(num).getHotel().getAbout()!=null)
		str += tours.get(num).getHotel().getAbout();
		return str;
	}
	public String getTourCountry() {
		String str;
		str = tours.get(num).getHotel().getCity().getCountry().getCountryName()+". ";
		if(tours.get(num).getHotel().getCity().getCountry().getAbout()!=null)
		str += tours.get(num).getHotel().getCity().getCountry().getAbout();
		return str;
	}
	public String getTourCity() {
		String str;
		str = tours.get(num).getHotel().getCity().getCityName()+". ";
		if(tours.get(num).getHotel().getCity().getAbout()!=null)
		str += tours.get(num).getHotel().getCity().getAbout();
		return str;
	}
	public String getTourTransfer() {
		String str;
		str = tours.get(num).getTransfer().getDateFrom().getTime()+" ";
		str += tours.get(num).getTransfer().getDateTo().getTime()+".";
		return str;
	}
	public String getTourTransport() {
		String str;
		str = tours.get(num).getTransport().getView().getName()+"  ";
		str += tours.get(num).getTransport().getView().getNumber()+"."+"\n";
		str += tours.get(num).getTransport().getDateFrom().getTime()+" - ";
		str += tours.get(num).getTransport().getCityFrom().getCityName() +"\n";
		str += tours.get(num).getTransport().getDateTo().getTime()+" - ";
		str += tours.get(num).getTransport().getCityTo().getCityName() +". ";
		return str;
	}
	public String getTourDates() {
		String str;
		str = tours.get(num).getDateFrom().getTime()+" - ";
		str += tours.get(num).getDateTo().getTime()+".";
		return str;
	}

	public int doStartTag() throws JspTagException {
		logger.info("Tour info tag do start");
		t = new TourDAO();
		tours = new ArrayList<Tour>();
		tours = t.readNB();
		flag = true;
		num = 1;
		if (pageContext.getRequest().getParameter("idTour") != null) {
			Scanner sc = new Scanner(pageContext.getRequest().getParameter(
					"idTour"));
			num = sc.nextInt();
		}
		return EVAL_BODY_INCLUDE;
	}

	public int doAfterBody() throws JspTagException {
		logger.info("Tour info tag After body");
		if (flag) {
			try {
				pageContext.getOut().write("<div class=");
				pageContext.getOut().write("\"post\"");
				pageContext.getOut().write(">");
				pageContext.getOut().write("<h1 class=");
				pageContext.getOut().write("\"title\"");
				pageContext.getOut().write(">");
				
				pageContext.getOut().write(getTourPlace());
				
				pageContext.getOut().write("</h1>");
				pageContext.getOut().write("<div class=");
				pageContext.getOut().write("\"entry\"");
				pageContext.getOut().write(">");
				pageContext.getOut().write("<p><img src=\"");
				pageContext.getOut().write(pageContext.getServletContext().getContextPath()+
						ConfigurationManager.getInstance().getProperty(
						ConfigurationManager.IMAGE_PAGE_PATH)+ "\"");
				pageContext.getOut().write("alt=\"\" width=");
				pageContext.getOut().write("\"140\"");
				pageContext.getOut().write("height=");
				pageContext.getOut().write("\"125\"");
				pageContext.getOut().write("class=");
				pageContext.getOut().write("\"left\"");
				pageContext.getOut().write("/>");
				
				pageContext.getOut().write(getTourDates());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourCountry());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourCity());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourHotel());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourTransport());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourTransfer());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourPeople());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write(getTourEat());
				pageContext.getOut().write("<br/>");
				pageContext.getOut().write("Price: ");
				pageContext.getOut().write(getTourPrice()+" $");
				
				pageContext.getOut().write("</p>");
				pageContext.getOut().write("<p>&nbsp;</p>");
				pageContext.getOut().write("</div>");
				pageContext.getOut().write("<div class=");
				pageContext.getOut().write("\"meta \"");
				pageContext.getOut().write(">");
				pageContext.getOut().write("<p class=");
				pageContext.getOut().write("byline");
				pageContext.getOut().write(">Posted on July 21, 2007</p>");
				
				logger.debug("autorisation check");
				if (pageContext.getSession().getAttribute("user") != ""
						&& pageContext.getSession().getAttribute("user") != null) {

					Person p = new Person();
					PersonDAO pd = new PersonDAO();
			
					p = pd.readByLogin(pageContext.getSession().getAttribute(
							"user")
							+ "");

					logger.debug("is admin");
					if (!p.isAdmin()) {
						pageContext.getOut().write("<p class=");
						pageContext.getOut().write("\"links\"");
						pageContext.getOut().write("><a href=");
						
						pageContext.getOut().write(
								"\"buy.jsp?idTour=" + (num) + "\"");
						pageContext.getOut().write("class=");
						pageContext.getOut().write("\"link\"");
						pageContext.getOut().write(">Buy</a></p>");
	
					}else{
						pageContext.getOut().write("<p class=");
						pageContext.getOut().write("\"links\"");
						pageContext.getOut().write("><a href=");
						
						pageContext.getOut().write(
								"\"addsettour.jsp?tourid=" + t.readNB().get(num).getId() + "\"");
						pageContext.getOut().write("class=");
						pageContext.getOut().write("\"link\"");
						pageContext.getOut().write(">Set</a></p>");

					}
				}
				
				pageContext.getOut().write("</div>");
				pageContext.getOut().write("</div>");
				
				flag=false;
			} catch (IOException e) {
				logger.error("Error in view tour tag");
			}
			return EVAL_BODY_AGAIN;
		} else {
			return SKIP_BODY;
		}
	}

	public int doEndTag() throws JspTagException {
		return SKIP_BODY;
	}
}

